package io.xxx.xbutler.core.callback;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import io.xxx.xbutler.data.RobotLoginMapper;
import io.xxx.xbutler.domain.Callback;
import io.xxx.xbutler.domain.RobotLogin;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 授权码扫码回调接口
 * <p>
 * 登录方式 10 扫码登录 11 缓存登录
 * （如果该账号为新号，则该登录方式值为10，则平台接下来会回调一个登录二维码给商家，商家拿到nType:1001中的二维码扫码登录；
 * 如果该账号是在平台为老号，则值为11，平台会使用缓存登录，但是缓存登录有可能会失效，当缓存失效时，平台会自动推送登录二维码给商家，商家使用扫码登录。）
 *
 * <pre>
 * {
 *     "nType": 1026,
 *     "vcMerchantNo": "",
 *     "vcRobotWxId": "",
 *     "vcRobotSerialNo": "",
 *     "vcSerialNo": "",
 *     "nResult": 1,
 *     "vcResult": "SUCCESS",
 *     "Data": {
 *         "vcRobotWxId": "",
 *         "vcRobotSerialNo": "",
 *         "nLoginType": 11,
 *         "dtDateTime": "2020-03-05 10:22:05"
 *     }
 * }
 * </pre>
 */
@Slf4j
@Component
public class _1026Handler implements CallbackHandler {

    @Resource
    private RobotLoginMapper robotLoginMapper;

    @Override
    public String name() {
        return "授权码扫码回调";
    }

    @Override
    public boolean supports(int type) {
        return type == 1026;
    }

    @Override
    public void handle(Callback callback) {
        JSONObject data = (JSONObject) callback.getData();
        LambdaUpdateWrapper<RobotLogin> wrapper = new LambdaUpdateWrapper<RobotLogin>()
                .set(RobotLogin::getLoginType, data.getInteger("nLoginType"))
                .eq(RobotLogin::getSerialNo, callback.getSerialNo());
        robotLoginMapper.update(wrapper);
    }
}
